//package mya.mes.mdc.model.alarm;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.ConcurrentHashMap;
//
//public class CurrentAlarm {
//
//  private static final CurrentAlarm _instance = new CurrentAlarm();
//  /**
//   * key = mdcTag
//   */
//  private final ConcurrentHashMap<String, AlarmArray> map = new ConcurrentHashMap<>(101);
//
//  public static CurrentAlarm getInstance() {
//    return _instance;
//  }
//
//
//  public synchronized List<Alarm> asList() {
//
//    List<Alarm> list = new ArrayList<>();
//
//
//    map.values().forEach(alarmArray -> {
//      alarmArray.collect(list);
//    });
//
//    return list;
//
//  }
//
//
//  public synchronized List<Alarm> sentToWeixinList() {
//
//    List<Alarm> list = new ArrayList<>();
//
//    long now = System.currentTimeMillis();
//    map.values().forEach(alarmArray -> {
//      alarmArray.collectSentToWeixin(list, now);
//    });
//
//    return list;
//
//  }
//
//
//  public synchronized List<Alarm> sentToManagerList() {
//
//    List<Alarm> list = new ArrayList<>();
//
//    long now = System.currentTimeMillis();
//    map.values().forEach(alarmArray -> {
//      alarmArray.collectSentToManager(list, now);
//    });
//
//    if(list.size() > 0) {
//      System.out.println("managerList:" + list.size());
//    }
//    return list;
//
//  }
//
//  public Alarm getAlarm(String mdcTag, int mcTagIndex) {
//    AlarmArray array = map.get(mdcTag);
//
//    if (array == null) {
//      return null;
//    }
//
//
//    return array.get(mcTagIndex);
//  }
//
//
//  AlarmArray getAlarmArray(String mdcTag) {
//    return map.get(mdcTag);
//  }
//
//  /**
//   * 如果不存在， 则创建AlarmArray
//   *
//   * @param mdcTag
//   * @return
//   */
//  AlarmArray createOrGetAlarmArray(String mdcTag) {
//    AlarmArray array = map.get(mdcTag);
//    if (array != null) {
//      return array;
//    }
//
//    array = new AlarmArray(mdcTag);
//
//    map.put(mdcTag, array);
//
//    return array;
//  }
//
//  public boolean hasAlarm(String mdcTag) {
//    AlarmArray array = map.get(mdcTag);
//
//    if (array == null) {
//      return false;
//    }
//
//    return !array.isAllNull();
//  }
//
//  public boolean hasAlarm(ViewTagValue viewTagValue) {
//    if (viewTagValue.alarmTagValueList == null || viewTagValue.alarmTagValueList.isEmpty()) {
//      return false;
//    }
//
//    for (MdcTagValue mdcTagValue : viewTagValue.alarmTagValueList) {
//
//      if (hasAlarm(mdcTagValue.mdcTag.tagName)) {
//        return true;
//      }
//
//    }
//
//    return false;
//  }
//
//  /**
//   * 检查是否有没有消除的报警
//   *
//   * @return
//   */
//  public synchronized boolean hasCurrentAlarm() {
//
//    for (AlarmArray array : map.values()) {
//      if (array != null) {
//        if (!array.isAllNull()) {
//          return true;
//        }
//      }
//    }
//    return false;
//  }
//
//
//  /**
//   * 检查是否有没有报警持续长度超过一定值的报警
//   *
//   * @return
//   */
//  public synchronized boolean hasTimeLast(long currrentTime, long threshold) {
//
//    for (AlarmArray array : map.values()) {
//      if (array != null) {
//        if (array.timeLast(currrentTime, threshold)) {
//          return true;
//        }
//      }
//    }
//    return false;
//  }
//
//
//
//
//
//  public synchronized void loadData(List<JsonObject> list) {
//
//    map.clear();
//
//    if (list == null || list.isEmpty()) {
//
//      return;
//    }
//
//    list.forEach(jsonObject -> {
//
//      Alarm alarm = new Alarm(jsonObject);
//
//      putAlarm(alarm);
//
//    });
//  }
//
//  public synchronized void update(ViewTagValues viewTagValues) {
//    if (!viewTagValues.hasAlarm()) {
//      return;
//    }
//
//    for (ViewTagValue viewTagValue : viewTagValues.map.values()) {
//      if (viewTagValue.alarmHolder != null) {
//
//        update(viewTagValue.alarmHolder);
//      }
//
//    }
//
//  }
//
//  public void update(AlarmHolder alarmHolder) {
//    if (alarmHolder.isAllEmpty()) {
//      return;
//    }
//
//    if (!alarmHolder.isListStopEmpty()) {
//      alarmHolder.listStop.forEach(alarm -> {
//        removeAlarm(alarm);
//      });
//    }
//
//    if (!alarmHolder.isListStartEmpty()) {
//      alarmHolder.listStart.forEach(alarm -> {
//        putAlarm(alarm);
//      });
//    }
//  }
//
//
//
//  private void putAlarm(Alarm alarm) {
//
//    String mdcTag = alarm.mdcTag;
//    int mdcTagIndex = alarm.mdcTagIndex;
//
//    AlarmArray array = map.get(mdcTag);
//
//    if (array == null) {
//      array = new AlarmArray(mdcTag);
//
//      map.put(mdcTag, array);
//    }
//
//
//    array.put(mdcTagIndex, alarm);
//
//  }
//
//  private void removeAlarm(Alarm alarm) {
//    if (alarm == null) {
//      return;
//    }
//
//    String mdcTag = alarm.mdcTag;
//    int mdcTagIndex = alarm.mdcTagIndex;
//
//    AlarmArray array = map.get(mdcTag);
//
//    if (array == null) {
//
//      return;
//    }
//
//
//    array.put(mdcTagIndex, null);
//
//    if (array.isAllNull()) {
//      //如果数组中都为空,从map中清除掉
//      map.remove(mdcTag);
//    }
//
//  }
//
//
//  public synchronized void syncDataToDb() {
//    List<Alarm> list = asList();
//
//
//  }
//
//
//
//}
